package yl.hs.bmipfull.service.system;

import org.apache.ibatis.annotations.Param;
import yl.hs.bmipfull.pojo.system.GlobalSearchItemEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;
import yl.hs.bmipfull.viewmodels.SubmitModel;

import java.util.List;
import java.util.Map;

/*
 * IGlobalSearchItemService
 * @category
 * @author 谢景广
 * @date 2021-06-28
 */
public interface IGlobalSearchService extends IBaseService {

    /**
     * 根据分页搜索获取全局搜索设置项信息
     *
     * @param query    搜索/分页对象
     * @param page     页码
     * @param pageSize 页面数据量
     * @return 分页结果
     */
    PageResult<GlobalSearchItemEntity> queryListByPage(PageQuery query, int page, int pageSize);

    /**
     * 获取所有的全局搜索设置项信息
     *
     * @return 全局搜索设置项信息集合
     */
    List<GlobalSearchItemEntity> queryAllItems();

    /**
     * 根据编号集合删除全局搜索设置项
     *
     * @param snList 编号集合
     * @return 删除结果
     */
    Integer deleteDataBySNList(List<String> snList);

    /**
     * 保存用户提交的搜索设置项信息
     *
     * @param model 用户提交的搜索设置项信息
     * @return 保存操作结果
     */
    Integer saveSearchItem(SubmitModel model) throws Exception;

    /**
     * 根据用户已授权的功能数据代码获取用户的可搜索范围
     *
     * @param userSearchRang 用户授权的功能数据代码集合
     * @return 用户的可搜索范围
     */
    List<Map<String, Object>> queryItemsByCodes(List<String> userSearchRang);

    /**
     * 根据数据代码判断是否存在数据搜索项
     *
     * @param dataCode 数据代码
     * @param oldSN    编辑时的搜索项编号
     * @return 判断结果
     */
    boolean checkDataCode(String dataCode, String oldSN);

    Map<String, Object> search(String key, String dataCode);

    List<String> tableFieldValueGroupField(String table, String field);
}
